#ifndef USUARIO_H
#define USUARIO_H

#include <string>
#include <set>
#include <vector>
#include "types/DateTime.h"
#include "models/Recurso.h"
#include "models/Carpeta.h"
#include "models/Notificacion.h"
#include "interfaces/IObservadorArchivo.h"


using namespace std;

class Usuario: public IObservadorArchivo{

 private:
              string nickname;
              string sexo;
              DateTime FechaNacimiento;
              double Edad;
              set<Recurso*> recursosPropios;
              set<Carpeta*> recursosColaborador;
              set<Notificacion*> notificaciones;

 public:
              //Constructors
              Usuario(void);
              Usuario(string nickname);

              //Sets
              void setNickname(string);
              void setSexo(string);
              void setFechaNacimiento(DateTime);
              void setEdad();

              //Gets
              string getNickname();
              string getSexo();
              DateTime getFechaNacimiento();
              double getEdad();
              set<Recurso*> getRecursosPropios();
              set<Carpeta*> getCarpetasColaboradas();

              //Operations
              bool noEnUso(string nickname);

              void imprimirNombreUsuario();
              void imprimirSexoUsuario();
              void imprimirEdadUsuario();
              void imprimirFechaNacUsuario();
              vector<string*> ObtenerInfoRecursosPropios();
              vector<string*> ObtenerInfoRecursosColaborador(string);

              void notificar(string tipoAccion, string nombreArchivo);

};

#endif
